package eva.savant.business.compras.view

import eva.savant.business.material.view.Bean
import eva.savant.businessobject.gl.Persona
import eva.savant.businessobject.mt.Material
import eva.savant.businessobject.cm.Comprador
import eva.savant.businessobject.cm.Solicitud
import eva.savant.businessobject.cm.SolicitudDetalle

import javax.faces.bean.ManagedBean
import javax.faces.bean.SessionScoped
import javax.annotation.PostConstruct
import javax.faces.convert.Converter

@SessionScoped
@ManagedBean(name = 'ITSolicitud')
public class ITSolicitud extends Bean {

  def XMaterialCod = ''

  SolicitudDetalle detail

  @PostConstruct
  public void cleanEntity() {

    focus= 'personaId:complete'


    entity= new Solicitud(); init()

    entity.solicitud= new Date()

    entity.necesidad= new Date()

    entity.persona= new Persona()

    entity.comprador= new Comprador()

    entity.lsSolicitudDetalle= new ArrayList<SolicitudDetalle>()


    lsEntity= new ArrayList<Solicitud>()


    XMaterialCod= ''


    detail= new SolicitudDetalle()

    detail.material= new Material()


    entity.comprador= get(Comprador,'persona.id=?',usuario.persona.id)

    if(entity.comprador == null) { addErrorMessage 'El usuario no esta registrado como comprador' }
  }

  public List findLsEntity() {

    return find(Solicitud.class,'persona.id=? and confirmacion is null order by id desc',usuario.persona.id)
  }

  public void editEntity(Object id) {

    entity= get(Solicitud.class,id)
  }

  public void XMaterialFind() {

    detail.material= get(Material.class,'rapido=?',toInteger(XMaterialCod))

    if(detail.material == null) detail.material= get(Material.class, sociedad.id + XMaterialCod)

    if(detail.material == null) detail.material= get(Material.class,'barras=?', XMaterialCod)

    if(detail.material != null) XMaterialSelect()
  }

  public void XMaterialSelect() {

    focus= 'ps:cantidadId:valueId'

    XMaterialCod= detail.material.codigo
  }

  public void detailAdd() {

    if(detail.material?.id == null) { addErrorMessage 'Debe seleccionar un producto'; return; }


    if(detail.solicitado < 1) {

    addErrorMessage 'La cantidad de producto debe ser mayor a cero'; return; }


    def d= new SolicitudDetalle()

    d.solicitud  = entity

    d.material   = detail.material

    d.solicitado = detail.solicitado

    d.confirmado = 0

    alta(d)


    detailDelete(d)

    entity.lsSolicitudDetalle.add(d)


    detail= new SolicitudDetalle()

    detail.material= new Material()


    XMaterialCod= ''

    focus= 'ps:materialId:valueId'
  }

  public void detailDelete(SolicitudDetalle detail) {

    if(isRead) return

    for(int i=0; i < entity.lsSolicitudDetalle.size(); i++)  {

    def d= entity.lsSolicitudDetalle.get(i)

    if(d.material.id.equalsIgnoreCase(detail.material.id))

    { entity.lsSolicitudDetalle.remove(i); break }  }
  }

  public boolean mergeEntity(Object entity) { alta((Solicitud)entity); entity= (Solicitud) entity

    if(entity.lsSolicitudDetalle?.size() < 1) { addErrorMessage 'El detalle de productos esta vacio'; return false }

    entity= merge(entity)

    addInfoMessage 'Se registro la solicitud '+entity.id+' correctamente'

    return true
  }

  public List complete(String value) { return completeLike(Persona.class,'nombre',value) }

  public Converter getConverter() { return converterLike(Persona.class) }

  def getXMaterialConverter() { return converterLike(Material.class) }

  def XMaterialComplete(String value) { return completeLike(Material.class,'nombre',value) }

}
